Batch Processing হল একটি পদ্ধতি যেখানে একাধিক ডেটাবেজ অপারেশন (যেমন ইনসার্ট, আপডেট বা ডিলিট) একসঙ্গে কার্যকর করা হয়। এটি একাধিক ট্রানজেকশন পরিচালনা করার পরিবর্তে একটি ট্রানজেকশনে সম্পন্ন করে ডেটাবেজ অপারেশনের কার্যকারিতা এবং পারফরম্যান্স বৃদ্ধি করে।
Spring ORM Hibernate ব্যবহার করে Batch Processing সহজে বাস্তবায়ন করতে পারে।
Hibernate এর hibernate.jdbc.batch_size প্রপার্টি ব্যবহার করে ব্যাচ প্রসেসিং সক্রিয় করতে হয়।
উদাহরণ:
hibernate.jdbc.batch_size=20
এটি নির্দেশ করে একবারে ২০টি অপারেশন ব্যাচ হিসেবে সম্পন্ন করা হবে।
@Service
public class EmployeeService {
@Autowired
private SessionFactory sessionFactory;
@Transactional
public void saveEmployeesBatch(List<Employee> employees) {
Session session = sessionFactory.getCurrentSession();
int batchSize = 20; // প্রতিটি ব্যাচে ২০টি রেকর্ড প্রক্রিয়া হবে
for (int i = 0; i < employees.size(); i++) {
session.save(employees.get(i));
if (i % batchSize == 0) {
session.flush(); // ডেটা ডেটাবেজে লিখুন
session.clear(); // Hibernate ক্যাশ পরিষ্কার করুন
}
}
}
}
বর্ণনা:
session.save()
দিয়ে প্রতিটি অবজেক্ট সেভ করা হয়।session.flush()
ডেটাবেজে ব্যাচ রাইট অপারেশন সম্পন্ন করে।session.clear()
Hibernate এর ক্যাশ পরিষ্কার করে পরবর্তী ব্যাচের জন্য প্রস্তুত করে।@RestController
@RequestMapping("/employees")
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@PostMapping("/batch")
public void saveEmployeesBatch(@RequestBody List<Employee> employees) {
employeeService.saveEmployeesBatch(employees);
}
}
বর্ণনা:
/employees/batch
এপিআই ব্যবহার করে একাধিক এমপ্লয়ি ব্যাচ হিসেবে ইনসার্ট করা যায়।@Service
public class EmployeeService {
@Autowired
private EntityManager entityManager;
@Transactional
public void saveEmployeesBatch(List<Employee> employees) {
int batchSize = 20; // প্রতিটি ব্যাচে ২০টি রেকর্ড প্রক্রিয়া হবে
for (int i = 0; i < employees.size(); i++) {
entityManager.persist(employees.get(i));
if (i % batchSize == 0) {
entityManager.flush(); // ডেটা ডেটাবেজে লিখুন
entityManager.clear(); // EntityManager ক্যাশ পরিষ্কার করুন
}
}
}
}
বর্ণনা:
entityManager.persist()
দিয়ে ডেটা ইনসার্ট করা হয়।entityManager.flush()
ডেটা ব্যাচ হিসেবে ডেটাবেজে পাঠায়।entityManager.clear()
মেমোরি ব্যবহারের দক্ষতার জন্য ক্যাশ পরিষ্কার করে।Spring ORM এর পরিবর্তে আপনি Spring Batch Framework ব্যবহার করেও বড় আকারের ডেটা প্রসেস করতে পারেন। এটি আরও শক্তিশালী এবং উন্নত ফিচার সরবরাহ করে।
Batch Processing সঠিকভাবে ব্যবহৃত হলে এটি ডেটাবেজ অপারেশনের সময় এবং খরচ কমিয়ে পারফরম্যান্স উন্নত করতে পারে।
Read more